/// @tags: Stirling
#include <cstdio>
#include <iostream>

using namespace std;

namespace BlueQuantum {

typedef long long ll;

int const N = 5e3 + 5, P = 998244353;

int n, m, k;
int S[N][N];

inline ll qpow(ll base, int index) {
  ll res = 1;
  while (index) {
    if (index & 1) res = res * base % P;
    base = base * base % P;
    index >>= 1;
  }
  return res;
}

inline int main() {
  cin >> n >> m >> k;
  S[0][0] = 1;
  for (int i = 1; i <= k; ++i)
    for (int j = 1; j <= i; ++j)
      if ((S[i][j] = S[i - 1][j] * (ll)j % P + S[i - 1][j - 1]) >= P) S[i][j] -= P;
  ll ans = 0, fac = 1;
  for (int i = 0; i <= min(n, k); ++i) {
    if ((ans = ans + fac * S[k][i] % P * qpow(m, n - i) % P) >= P) ans -= P;
    fac = fac * (n - i) % P;
  }
  cout << ans * qpow(qpow(m, n), P - 2) % P;
  return 0;
}

}  // namespace BlueQuantum

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("/tmp/CodeTmp/testdata.in", "r", stdin);
  freopen("/tmp/CodeTmp/testdata.out", "w", stdout);
#else
  freopen("CF1278F Cards.in", "r", stdin);
  freopen("CF1278F Cards.out", "w", stdout);
#endif
#endif

  ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  return BlueQuantum::main();
}
